//全局变量，是否正在跳转中，防止双击跳转两个页面
var isRedirect = false
const Debounce = function (fn, delay) {
  var timer
  return function () {
    var context = this
    var args = arguments
    clearTimeout(timer)
    timer = setTimeout(function () {
      fn.apply(context, args)
    }, delay)
  }
}
const GetRequest = function () {
  var url = window.location.search //获取url中"?"符后的字串
  var theRequest = new Object()
  if (url.indexOf('?') != -1) {
    var str = url.substr(1)
    var strs = str.split('&')
    for (var i = 0; i < strs.length; i++) {
      theRequest[strs[i].split('=')[0]] = unescape(strs[i].split('=')[1])
    }
  }
  return theRequest
}
/**
 * 时间格式化,dateFormat('yyyy-MM-dd hh:mm:ss')}
 * @param {Object} value
 * @param {Object} fmt
 */
const dateFormat = function (value, fmt) {
  let getDate
  if (value) {
    getDate = new Date(value)
  } else {
    //当前时间
    getDate = new Date()
  }
  const o = {
    'M+': getDate.getMonth() + 1,
    'd+': getDate.getDate(),
    'h+': getDate.getHours(),
    'm+': getDate.getMinutes(),
    's+': getDate.getSeconds(),
    'q+': Math.floor((getDate.getMonth() + 3) / 3),
    S: getDate.getMilliseconds(),
  }
  if (/(y+)/.test(fmt)) {
    fmt = fmt.replace(RegExp.$1, (getDate.getFullYear() + '').substr(4 - RegExp.$1.length))
  }
  for (const k in o) {
    if (new RegExp('(' + k + ')').test(fmt)) {
      fmt = fmt.replace(
        RegExp.$1,
        RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length)
      )
    }
  }
  return fmt
}
/**
 * 时间差,返回小时分
 * @param 开始时间
 * @param 结束时间
 */
const dateDiff = function (starttime, endtime) {
  var date1 = new Date(starttime) //开始时间
  var date2 = new Date(endtime) //结束时间
  var date3 = date2.getTime() - date1.getTime() //时间差的毫秒数
  //计算出小时数
  var leave1 = date3 % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
  var hours = Math.floor(leave1 / (3600 * 1000))
  //console.log('hours:'+hours)
  //计算相差分钟数
  var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
  var minutes = Math.floor(leave2 / (60 * 1000))
  //console.log('minutes:'+minutes)
  var fmt = hours + '时' + minutes + '分'
  return fmt
}
const BASEisNotFloat = function (value) {
  if (value == '') return false
  if (!IsNum(value) && !Isfloat(value)) {
    return false
  }
  return true
}
const IsNum = function (str) {
  return /^\d+$/.test(str) //为真
}
const Isfloat = function (str) {
  var reg = /^\d+(\.\d+)?$/
  return reg.test(str)
}

function StringToint(val) {
  if (val == undefined || val == '') return 0
  else return parseInt(val)
}

//长时间格式转短时间格式
function DatetimeToShortTime(val) {
  var list = val.split(' ')
  if (list.length == 2) return list[0]
  else return val
}
function getimgurl(e) {
  if (e != undefined) {
    if (e.indexOf('http') != -1) {
      return e
    } else {
      const imageUrl = 'https://pic.hzszqt.com/gp-boot/sys/common/static/'
      return imageUrl + e
    }
  }
}

/**
 * 身份证15位编码规则：dddddd yymmdd xx p dddddd：6位地区编码 yymmdd: 出生年(两位年)月日，如：910215 xx:
 * 顺序编码，系统产生，无法确定 p: 性别，奇数为男，偶数为女
 *
 * 身份证18位编码规则：dddddd yyyymmdd xxx y dddddd：6位地区编码 yyyymmdd:
 * 出生年(四位年)月日，如：19910215 xxx：顺序编码，系统产生，无法确定，奇数为男，偶数为女 y: 校验码，该位数值可通过前17位计算获得
 *
 * 前17位号码加权因子为 Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ] 验证位
 * Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ] 如果验证码恰好是10，为了保证身份证是十八位，那么第十八位将用X来代替
 * 校验位计算公式：Y_P = mod( ∑(Ai×Wi),11 ) i为身份证号码1...17 位; Y_P为校验码Y所在校验码数组位置
 */
function isIdCard(idCard) {
  // 15位和18位身份证号码的正则表达式
  var regIdCard =
    /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/

  // 如果通过该验证，说明身份证格式正确，但准确性还需计算
  if (regIdCard.test(idCard)) {
    if (idCard.length == 18) {
      var idCardWi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2) // 将前17位加权因子保存在数组里
      var idCardY = new Array(1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2) // 这是除以11后，可能产生的11位余数、验证码，也保存成数组
      var idCardWiSum = 0 // 用来保存前17位各自乖以加权因子后的总和
      for (var i = 0; i < 17; i++) {
        idCardWiSum += idCard.substring(i, i + 1) * idCardWi[i]
      }

      var idCardMod = idCardWiSum % 11 // 计算出校验码所在数组的位置
      var idCardLast = idCard.substring(17) // 得到最后一位身份证号码

      // 如果等于2，则说明校验码是10，身份证号码最后一位应该是X
      if (idCardMod == 2) {
        if (idCardLast == 'X' || idCardLast == 'x') {
          //alert("恭喜通过验证啦！");
          return true
        } else {
          //alert("身份证号码错误！");
          return false
        }
      } else {
        // 用计算出的验证码与最后一位身份证号码匹配，如果一致，说明通过，否则是无效的身份证号码
        if (idCardLast == idCardY[idCardMod]) {
          //alert("恭喜通过验证啦！");
          return true
        } else {
          //alert("身份证号码错误！");
          return false
        }
      }
    } else {
      return true
    }
  } else {
    //alert("身份证格式不正确!");
    return false
  }
}
export {
  Debounce,
  GetRequest,
  dateFormat,
  dateDiff,
  BASEisNotFloat,
  StringToint,
  DatetimeToShortTime,
  getimgurl,
  isIdCard,
}
